/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package comunicacao;

import cliente.Cliente;
import fachada.Fachada;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import pedido.Pedido;
import produto.Produto;
import tipoformapgto.TipoFormaPgto;

/**
 *
 * @author Anderson
 */
public class ComunicacaoWeb {
    private static ComunicacaoWeb comunicacaoWeb;
    private Fachada fachada;

    private ComunicacaoWeb()
    {
        try {
            fachada = Fachada.getFachada();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ComunicacaoWeb.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(ComunicacaoWeb.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public static ComunicacaoWeb getComunicacaoWeb()
    {
        if (comunicacaoWeb == null) {
            comunicacaoWeb = new ComunicacaoWeb();
        }
        return comunicacaoWeb;
    }
    public String realizarLogin(String login, String password)
    {
        
        try {

            Cliente cliente = new Cliente();
            cliente.setSenha(password);
            cliente.setLogin(login);
            cliente = Fachada.getFachada().procurar(cliente);
            
            if(cliente == null)
                return "sem cliente";
            return cliente.toString();

        } catch (SQLException ex) {
            return ex.getMessage();
        } catch (ClassNotFoundException ex) {
            return ex.getMessage();
        }
    }

    public String efetuarPedido(int idCliente, float valorTotal, String data, String hora, int formaPgto, String produtos)
    {
        return "Ainda não implementado";
//        try {
//            Pedido pedido = new Pedido();
//            pedido.setCliente(idCliente);
//            pedido.setData(data);
//            pedido.setHora(hora);
//            pedido.setFormaPgto(formaPgto);
//            EstadoPedido estado = new EstadoPedido();
//            estado.setNome("Aberto");
//            pedido.setEstado(fachada.procurar(estado).getId());
//            fachada.adicionar(pedido);
//            fachada.conexao.commit();
//            return true;
//
//        } catch (SQLException ex) {
//            Logger.getLogger(ComunicacaoWeb.class.getName()).log(Level.SEVERE, null, ex);
//        } catch (ClassNotFoundException ex) {
//            Logger.getLogger(ComunicacaoWeb.class.getName()).log(Level.SEVERE, null, ex);
//        }
//        return false;
    }

    public String buscarFormasPgto(int id, String descricao)
    {
        TipoFormaPgto tipoFormaPgto = null;
        try {
            tipoFormaPgto = new TipoFormaPgto();
            if (id != -1) {
                tipoFormaPgto.setId(id);
            }
            if (descricao != null) {
                tipoFormaPgto.setDescricao(descricao);
            }
            Vector<TipoFormaPgto> tipos = Fachada.getFachada().procurarLista(tipoFormaPgto);
            String resultado = "";
            for (int cont = 0; cont < tipos.size(); cont++)
            {
                resultado += tipos.get(cont).toString() + "|";
            }
            return resultado.substring(0, resultado.length()-1);

        } catch (ClassNotFoundException ex) {
            return "Erro Classe não encontrada: " + ex.getMessage();
        } catch (SQLException ex) {
            return "Erro Classe não encontrada: " + ex.getMessage();
        }
    }
    public String cadastrarCliente(String nome, String endereco, String numero, String complemento, String bairro, String cidade, String estado, String pais, String login, String senha, String telefone, String skype, String observacao)
    {
        try {
            Fachada fachadaTmp = Fachada.getFachada();
            Cliente cliente = new Cliente();
            int numeroInt = -1;
            int idInt = -1;
            if(numero != null)
            {
                if(!numero.equals(""))
                {
                    numeroInt = Integer.valueOf(numero);
                    if(numeroInt != -1)
                    {
                        cliente.setNumero(numeroInt);
                    }
                }
            }

            //if (1 == 1) return cliente.toString();
            if(complemento != null) {if(!complemento.equals("")) cliente.setComplemento(complemento);}
            if(endereco != null) {if(!endereco.equals("")) cliente.setEndereco(endereco);}
            if(nome != null) {if(!nome.equals("")) cliente.setNome(nome);}
            if(bairro != null) {if(!bairro.equals("")) cliente.setBairro(bairro);}
            if(cidade != null) {if(!cidade.equals("")) cliente.setCidade(cidade);}
            if(estado != null) {if(!estado.equals("")) cliente.setEstado(estado);}
            if(pais != null) {if(!pais.equals("")) cliente.setPais(pais);}
            if(login != null) {if(!login.equals("")) cliente.setLogin(login);}
            if(senha != null) {if(!senha.equals("")) cliente.setSenha(senha);}
            if(telefone != null) {if(!telefone.equals("")) cliente.setTelefone(telefone);}
            if(skype != null) {if(!skype.equals("")) cliente.setSkype(skype);}
            if(observacao != null) {if(!observacao.equals("")) cliente.setObs(observacao);}
            
            //if(id = -1)
            //Cliente cliente = new Cliente(id, nome, endereco, numero, complemento, bairro, cidade, estado, pais, skype, observacao, telefone, login, senha);

            fachadaTmp.adicionar(cliente);
            return fachadaTmp.procurar(cliente).toString();
        } catch (SQLException ex) {
            return "erro SQL: " + ex.getMessage();
        } catch (ClassNotFoundException ex) {
            return "erro Classe não encontrada: " + ex.getMessage();
        }
    }

    public String removerCliente(String id, String nome, String endereco, String numero, String complemento, String bairro, String cidade, String estado, String pais, String login, String senha, String telefone, String skype, String observacao)
    {
        try {
            Fachada fachadaTmp = Fachada.getFachada();
            Cliente cliente = new Cliente();
            int numeroInt = -1;
            int idInt = -1;
            if(numero != null)
            {
                if(!numero.equals(""))
                {
                    numeroInt = Integer.valueOf(numero);
                    if(numeroInt != -1)
                    {
                        cliente.setNumero(numeroInt);
                    }
                }
            }

            if(id != null)
            {
                if(!id.equals(""))
                {
                    idInt = Integer.valueOf(id);
                    if(idInt != -1)
                    {
                        cliente.setId(idInt);
                    }
                }
            }
            //if (1 == 1) return cliente.toString();
            if(complemento != null) {if(!complemento.equals("")) cliente.setComplemento(complemento);}
            if(endereco != null) {if(!endereco.equals("")) cliente.setEndereco(endereco);}
            if(nome != null) {if(!nome.equals("")) cliente.setNome(nome);}
            if(bairro != null) {if(!bairro.equals("")) cliente.setBairro(bairro);}
            if(cidade != null) {if(!cidade.equals("")) cliente.setCidade(cidade);}
            if(estado != null) {if(!estado.equals("")) cliente.setEstado(estado);}
            if(pais != null) {if(!pais.equals("")) cliente.setPais(pais);}
            if(login != null) {if(!login.equals("")) cliente.setLogin(login);}
            if(senha != null) {if(!senha.equals("")) cliente.setSenha(senha);}
            if(telefone != null) {if(!telefone.equals("")) cliente.setTelefone(telefone);}
            if(skype != null) {if(!skype.equals("")) cliente.setSkype(skype);}
            if(observacao != null) {if(!observacao.equals("")) cliente.setObs(observacao);}

            //if(id = -1)
            //Cliente cliente = new Cliente(id, nome, endereco, numero, complemento, bairro, cidade, estado, pais, skype, observacao, telefone, login, senha);

            fachadaTmp.remover(cliente);
            return "cliente removido";
        } catch (SQLException ex) {
            return "erro SQL: " + ex.getMessage();
        } catch (ClassNotFoundException ex) {
            return "erro Classe não encontrada: " + ex.getMessage();
        }
    }
    public String atualizarCliente(String id, String nome, String endereco, String numero, String complemento, String bairro, String cidade, String estado, String pais, String login, String senha, String telefone, String skype, String observacao)
    {
        try {
            Fachada fachadaTmp = Fachada.getFachada();
            Cliente cliente = new Cliente();
            int numeroInt = -1;
            int idInt = -1;
            if(numero != null)
            {
                numeroInt = Integer.valueOf(numero);
                if(numeroInt != -1)
                {
                    cliente.setNumero(numeroInt);
                }
            }

            if(id != null)
            {
                idInt = Integer.valueOf(id);
                if(idInt != -1)
                {
                    cliente.setId(idInt);
                }

            }
            //if (1 == 1) return cliente.toString();
            if(numeroInt != -1) cliente.setNumero(numeroInt);
            if(complemento != null) cliente.setComplemento(complemento);
            if(endereco != null) cliente.setEndereco(endereco);
            if(nome != null) cliente.setNome(nome);
            if(bairro != null) cliente.setBairro(bairro);
            if(cidade != null) cliente.setCidade(cidade);
            if(estado != null) cliente.setEstado(estado);
            if(pais != null) cliente.setPais(pais);
            if(login != null) cliente.setLogin(login);
            if(senha != null) cliente.setSenha(senha);
            if(telefone != null) cliente.setTelefone(telefone);
            if(skype != null) cliente.setSkype(skype);
            if(observacao != null) cliente.setObs(observacao);

            //if(id = -1)
            //Cliente cliente = new Cliente(id, nome, endereco, numero, complemento, bairro, cidade, estado, pais, skype, observacao, telefone, login, senha);

            fachadaTmp.atualizar(cliente);
            return fachadaTmp.procurar(cliente).toString();
        } catch (SQLException ex) {
            return "erro SQL: " + ex.getMessage();
        } catch (ClassNotFoundException ex) {
            return "erro Classe não encontrada: " + ex.getMessage();
        }
    }
    public String procurarCliente(String id, String nome, String endereco, String numero, String complemento, String bairro, String cidade, String estado, String pais, String login, String senha, String telefone, String skype, String observacao)
    {
        try {
            Fachada fachadaTmp = Fachada.getFachada();
            Cliente cliente = new Cliente();
            int numeroInt = -1;
            int idInt = -1;
            if(numero != null)
            {
                numeroInt = Integer.valueOf(numero);
                if(numeroInt != -1)
                {
                    cliente.setNumero(numeroInt);
                }
            }

            if(id != null)
            {
                idInt = Integer.valueOf(id);
                if(idInt != -1)
                {
                    cliente.setId(idInt);
                }

            }
            //if(numeroInt != -1) return "é diferente";
            //else return "é igual";
            if(numeroInt != -1) cliente.setNumero(numeroInt);
            if(idInt != -1) cliente.setId(idInt);
            if(complemento != null) cliente.setComplemento(complemento);
            if(endereco != null) cliente.setEndereco(endereco);
            if(nome != null) cliente.setNome(nome);
            if(bairro != null) cliente.setBairro(bairro);
            if(cidade != null) cliente.setCidade(cidade);
            if(estado != null) cliente.setEstado(estado);
            if(pais != null) cliente.setPais(pais);
            if(login != null) cliente.setLogin(login);
            if(senha != null) cliente.setSenha(senha);
            if(telefone != null) cliente.setTelefone(telefone);
            if(skype != null) cliente.setSkype(skype);
            if(observacao != null) cliente.setObs(observacao);
            //if (true) return cliente.toString();
            //if(id = -1)
            //Cliente cliente = new Cliente(id, nome, endereco, numero, complemento, bairro, cidade, estado, pais, skype, observacao, telefone, login, senha);

            //fachadaTmp.procurar(cliente);
            return fachadaTmp.procurar(cliente).toString();
        } catch (SQLException ex) {
            return "erro SQL: " + ex.getMessage();
        } catch (ClassNotFoundException ex) {
            return "erro Classe não encontrada: " + ex.getMessage();
        }
    }
    public String procurarProdutos(String id, String nome, String descricao, String preco, String qtd, String garantia, String altura, String largura, String profundidade, String disponibilidade, String subcategoria, String peso)
    {
        Produto produtoCriterio = new Produto();

        int idInt = -1;
        int subcategoriaInt = -1;
        int qtdInt = -1;
        float precoFloat = -1;
        float alturaFloat = -1;
        float larguraFloat = -1;
        float profundidadeFloat = -1;
        float pesoFloat = -1;


        if(id != null)
        {
            idInt = Integer.valueOf(id);
            if(idInt != -1)
            {
                produtoCriterio.setId(idInt);
            }

        }
        if(subcategoria != null)
        {
            subcategoriaInt = Integer.valueOf(subcategoria);
            if(subcategoriaInt != -1)
            {
                produtoCriterio.setSubcategoria(subcategoriaInt);
            }

        }
        if(qtd != null)
        {
            qtdInt = Integer.valueOf(qtd);
            if(qtdInt != -1)
            {
                produtoCriterio.setQuantidade(qtdInt);
            }

        }
        if(preco != null)
        {
            precoFloat = Float.valueOf(preco);
            if(precoFloat != -1)
            {
                produtoCriterio.setPreco(precoFloat);
            }

        }
        if(altura != null)
        {
            alturaFloat = Float.valueOf(altura);
            if(alturaFloat != -1)
            {
                produtoCriterio.setAltura(alturaFloat);
            }

        }
        if(largura != null)
        {
            larguraFloat = Float.valueOf(largura);
            if(larguraFloat != -1)
            {
                produtoCriterio.setLargura(larguraFloat);
            }

        }
        if(profundidade != null)
        {
            profundidadeFloat = Float.valueOf(profundidadeFloat);
            if(profundidadeFloat != -1)
            {
                produtoCriterio.setAltura(profundidadeFloat);
            }

        }

        if(peso != null)
        {
            pesoFloat = Float.valueOf(peso);
            if(pesoFloat != -1)
            {
                produtoCriterio.setPeso(pesoFloat);
            }

        }





        if(nome != null) produtoCriterio.setNome(nome);
        if(descricao != null) produtoCriterio.setDescricao(descricao);
        if(precoFloat != -1) produtoCriterio.setPreco(precoFloat);
        if(qtdInt != -1) produtoCriterio.setQuantidade(qtdInt);
        if(garantia != null) produtoCriterio.setGarantia(garantia);
        if(idInt != -1) produtoCriterio.setId(idInt);
        if(alturaFloat != -1) produtoCriterio.setAltura(alturaFloat);
        if(larguraFloat != -1) produtoCriterio.setLargura(larguraFloat);
        if(disponibilidade != null) produtoCriterio.setDisponibilidade(disponibilidade);
        if(profundidadeFloat != -1) produtoCriterio.setProfundidade(profundidadeFloat);
        if(subcategoriaInt != -1) produtoCriterio.setSubcategoria(subcategoriaInt);
        if(pesoFloat != -1) produtoCriterio.setPeso(pesoFloat);


        Vector<Produto> vetor = null;
        try {
            Fachada fachadaTmp = Fachada.getFachada();
            vetor = fachadaTmp.procurarLista(produtoCriterio);
        } catch (SQLException ex) {
            vetor = null;
        } catch (ClassNotFoundException ex) {
            vetor = null;
        }
        String resultado = "";
        for(int cont = 0; cont < vetor.size(); cont++)
        {
            resultado += vetor.get(cont).toString() + "|";
        }
        return resultado.substring(0,resultado.length()-1);
    }

    public Produto[] getPromocoes(ComunicacaoFornecedor fornecedor)
    {
        Vector vetor = null;
        try {
            Fachada fachada = Fachada.getFachada();
            vetor = fachada.procurarLista(new Produto());
            return (Produto[])vetor.toArray();
        } catch (SQLException ex) {
            return null;
        } catch (ClassNotFoundException ex) {
            return null;
        }
    }

    Object[] procurarPedidos(Pedido pedido) {
        Vector vetor = null;
        try {
            Fachada fachada = Fachada.getFachada();
            vetor = fachada.procurarLista(pedido);
            return vetor.toArray();
        } catch (SQLException ex) {
            return null;
        } catch (ClassNotFoundException ex) {
            return null;
        }
    }
}
